package samples.tut1;

import org.creavi.engine.quickstart.QuickStartGame;

import com.jme.input.KeyInput;
import com.jme.math.Vector3f;
import com.jme.scene.shape.Box;

/**
 * Este es un ejemplo muy sencillo, que ejemplifica como crear Spatials y
 * agregarlos al juego para que sean visibles.
 * 
 * Ademas muestra como se puede utilizar el teclado para mover Spatials en
 * pantalla.
 * 
 * @author Hilario
 */
public class Tutorial1 extends QuickStartGame {

	/**
	 * Este metodo nos permitira ejecutar esta clase desde consola con el
	 * comando "java" o "javaw".
	 */
	public static void main(String[] args) {
		new Tutorial1().start();
	}

	/**
	 * Este objeto contendra la referencia a la Caja que moveremos con las
	 * flechitas del teclado.
	 */
	Box myBox;

	/**
	 * Este metodo se debe encargar de crear todos los objetos que utilizara
	 * nuestro juego.
	 */
	protected void initializeGame() {
		// Creamos una nueva caja
		myBox = new Box("myPrettyBox", new Vector3f(-1, -1, -1), new Vector3f(
				1, 1, 1));

		// Agregamos la caja a nuestro juego
		rootNode.attachChild(myBox);
	}

	/**
	 * Este metodo sera llamado dentro de un Loop infinito. Para simplificar la
	 * explicacion, imagina que funciona algo asi:
	 * 
	 * <code>
	 * while(true) {
	 *    updateGame(tiempo_desde_la_ultima_llamada);
	 *    drawScreen();
	 * }
	 * </code>
	 * 
	 * En donde el parametro "time" representa el tiempo desde la ultima llamada
	 * en segundos.
	 * 
	 * Este metodo es el que se encarga de mover la caja.
	 */
	protected void updateGame(float time) {
		if (keyboard.isKeyDown(KeyInput.KEY_LEFT)) {
			// Si la tecla Izquierda esta presionada,
			// entonces movemos la caja en X negativo (Izquierda)
			// a una velocidad de 10 puntos por segundo
			myBox.getLocalTranslation().addLocal(-10 * time, 0, 0);
		}
		if (keyboard.isKeyDown(KeyInput.KEY_RIGHT)) {
			// Si la tecla Derecha esta presionada,
			// entonces movemos la caja en X positivo (Derecha)
			// a una velocidad de 10 puntos por segundo
			myBox.getLocalTranslation().addLocal(10 * time, 0, 0);
		}
		if (keyboard.isKeyDown(KeyInput.KEY_UP)) {
			// Si la tecla Arriba esta presionada,
			// entonces movemos la caja en Y positivo (Arriba)
			// a una velocidad de 10 puntos por segundo
			myBox.getLocalTranslation().addLocal(0, 10 * time, 0);
		}
		if (keyboard.isKeyDown(KeyInput.KEY_DOWN)) {
			// Si la tecla Abajo esta presionada,
			// entonces movemos la caja en Y negativo (Abajo)
			// a una velocidad de 10 puntos por segundo
			myBox.getLocalTranslation().addLocal(0, -10 * time, 0);
		}
	}

}
